A estrutura de codificação utiliza conceitos modulares e regras de sincronização simples para tornar o software mais claro, seguro e fácil de gerar para os LLMs (Modelos de Aprendizagem Baseados em Aprendizagem).

Pesquisadores do MIT propõem decompor sistemas de software em "conceitos" (partes que executam tarefas específicas) e "sincronizações" (regras que definem como as partes se encaixam), abrindo caminho para um desenvolvimento de software mais seguro e automatizado. Créditos: Imagem: Alex Shipps/MIT CSAIL, utilizando recursos do Pexels
A programação com grandes modelos de linguagem (LLMs) é extremamente promissora, mas também expõe algumas falhas antigas do software: código desorganizado, difícil de modificar com segurança e, muitas vezes, opaco quanto ao que realmente acontece nos bastidores. Pesquisadores do Laboratório de Ciência da Computação e Inteligência Artificial (CSAIL) do MIT estão traçando um caminho mais "modular" para o futuro.
A nova abordagem divide os sistemas em "conceitos", partes separadas de um sistema, cada uma projetada para executar uma função específica com excelência, e "sincronizações", regras explícitas que descrevem exatamente como essas partes se encaixam. O resultado é um software mais modular, transparente e fácil de entender. Uma pequena linguagem de domínio específico (DSL) permite expressar as sincronizações de forma simples, em um formato que os LLMs (Linguagem de Manufatura Lógica) podem gerar de forma confiável. Em um estudo de caso real, a equipe demonstrou como esse método pode reunir funcionalidades que, de outra forma, estariam dispersas em vários serviços.
A equipe, que inclui Daniel Jackson, professor de engenharia elétrica e ciência da computação (EECS) do MIT e diretor associado do CSAIL, e Eagon Meng, estudante de doutorado em EECS, afiliado ao CSAIL e criador da nova DSL de sincronização, explora essa abordagem em seu artigo “ O que você vê é o que ele faz: um padrão estrutural para software legível ”, apresentado na Conferência Splash em Singapura, em outubro. O desafio, explicam eles, é que, na maioria dos sistemas modernos, um único recurso nunca é totalmente autossuficiente. Adicionar um botão “compartilhar” a uma plataforma social como o Instagram, por exemplo, não reside em um único serviço. Sua funcionalidade é dividida em códigos que lidam com publicação, notificação, autenticação de usuários e muito mais. Todas essas partes, apesar de estarem espalhadas pelo código, devem ser cuidadosamente alinhadas, e qualquer alteração acarreta o risco de efeitos colaterais indesejados em outras partes.
Jackson chama isso de “fragmentação de funcionalidades”, um obstáculo central para a confiabilidade do software. “Na forma como construímos software hoje, a funcionalidade não é localizada. Você quer entender como o 'compartilhamento' funciona, mas precisa procurar em três ou quatro lugares diferentes e, quando encontra, as conexões estão enterradas em código de baixo nível”, diz Jackson.
Conceitos e sincronizações visam solucionar esse problema. Um conceito engloba uma única funcionalidade coerente, como compartilhar, curtir ou seguir, juntamente com seu estado e as ações que pode executar. As sincronizações, por outro lado, descrevem em um nível mais alto como esses conceitos interagem. Em vez de escrever código de integração complexo de baixo nível, os desenvolvedores podem usar uma pequena linguagem específica de domínio (DSL) para explicitar essas conexões diretamente. Nessa DSL, as regras são simples e claras: a ação de um conceito pode desencadear a de outro, de modo que uma mudança em um estado possa ser mantida sincronizada com outro.
“Pense nos conceitos como módulos completamente independentes e organizados. As sincronizações, então, funcionam como contratos — elas definem exatamente como os conceitos devem interagir. Isso é poderoso porque torna o sistema mais fácil de entender para humanos e mais fácil para ferramentas como as LLMs gerarem corretamente”, diz Jackson. “Por que não podemos ler o código como um livro? Acreditamos que o software deve ser legível e escrito em termos da nossa compreensão: nossa esperança é que os conceitos correspondam a fenômenos familiares e que as sincronizações representem nossa intuição sobre o que acontece quando eles se unem”, diz Meng.
Os benefícios vão além da clareza. Como as sincronizações são explícitas e declarativas, elas podem ser analisadas, verificadas e, claro, geradas por um LLM (Learning Learning Machine). Isso abre caminho para um desenvolvimento de software mais seguro e automatizado, no qual assistentes de IA podem propor novos recursos sem introduzir efeitos colaterais ocultos.
Em seu estudo de caso, os pesquisadores atribuíram funcionalidades como curtir, comentar e compartilhar a um único conceito — semelhante a uma arquitetura de microsserviços, porém mais modular. Sem esse padrão, essas funcionalidades ficavam espalhadas por diversos serviços, dificultando sua localização e teste. Com a abordagem de conceitos e sincronizações, cada funcionalidade tornou-se centralizada e compreensível, enquanto as sincronizações detalhavam exatamente como os conceitos interagiam.
O estudo também mostrou como a sincronização pode eliminar preocupações comuns, como tratamento de erros, formatação de respostas ou armazenamento persistente. Em vez de incorporar esses detalhes em cada serviço, a sincronização pode lidar com eles uma única vez, garantindo consistência em todo o sistema.
Direções mais avançadas também são possíveis. A sincronização poderia coordenar sistemas distribuídos, mantendo as réplicas em servidores diferentes sincronizadas, ou permitir que bancos de dados compartilhados interagissem de forma transparente. A flexibilização da semântica de sincronização poderia viabilizar a consistência eventual, preservando a clareza no nível arquitetural.
Jackson vislumbra potencial para uma mudança cultural mais ampla no desenvolvimento de software. Uma das ideias é a criação de "catálogos de conceitos", bibliotecas compartilhadas de conceitos bem testados e específicos de domínio. O desenvolvimento de aplicações poderia então se tornar menos sobre criar código do zero e mais sobre selecionar os conceitos certos e escrever as sincronizações entre eles. "Os conceitos poderiam se tornar um novo tipo de linguagem de programação de alto nível, com as sincronizações sendo os programas escritos nessa linguagem."
“É uma forma de tornar as conexões no software visíveis”, diz Jackson. “Hoje, escondemos essas conexões no código. Mas se você puder vê-las explicitamente, poderá raciocinar sobre o software em um nível muito mais alto. Você ainda terá que lidar com a complexidade inerente das funcionalidades que interagem. Mas agora ela está à mostra, não dispersa e obscurecida.”
“Criar software para uso humano com base em abstrações de máquinas computacionais subjacentes sobrecarregou o mundo com software que, muitas vezes, é caro, frustrante e até perigoso de entender e usar”, afirma Kevin Sullivan, professor associado da Universidade da Virgínia, que não participou da pesquisa. “Os impactos (como na área da saúde) têm sido devastadores. Meng e Jackson invertem essa lógica e insistem em criar software interativo com base em abstrações da compreensão humana, que eles chamam de 'conceitos'. Eles combinam lógica matemática expressiva e linguagem natural para especificar essas abstrações com propósito, fornecendo uma base para verificar seus significados, compô-las em sistemas e refiná-las em programas adequados para uso humano. É uma nova e importante direção na teoria e prática do design de software que merece atenção.”
“Há muitos anos está claro que precisamos de maneiras melhores de descrever e especificar o que queremos que o software faça”, acrescenta Thomas Ball, professor honorário da Universidade de Lancaster e membro afiliado do corpo docente da Universidade de Washington, que também não participou da pesquisa. “A capacidade dos LLMs de gerar código só intensificou a discussão sobre especificações. O trabalho de Meng e Jackson sobre design conceitual oferece uma maneira promissora de descrever o que queremos de um software de forma modular. Seus conceitos e especificações são ideais para serem combinados com LLMs a fim de alcançar a intenção do projetista.”
Olhando para o futuro, os pesquisadores esperam que seu trabalho possa influenciar a forma como a indústria e a academia pensam sobre a arquitetura de software na era da IA. "Se o software quiser se tornar mais confiável, precisamos de maneiras de escrevê-lo que tornem suas intenções transparentes", diz Jackson. "Conceitos e sincronizações são um passo nessa direção."
Este trabalho foi parcialmente financiado pela Iniciativa de Aplicações de Aprendizado de Máquina (MLA) da CSAIL Alliances. Na época do financiamento, o conselho da iniciativa era composto pela British Telecom, Cisco e Ernst & Young.